/**
 * 矩阵操作类
 */
class Matrix {
    // 矩阵数组
    m

    constructor(matrix) {
        this.m = matrix
    }

    /**
     * 返回矩阵行
     * @returns {*}
     */
    get rowsNum() {
        return this.m.length
    }

    /**
     * 返回矩阵列
     * @returns {*}
     */
    get colsNum() {
        return this.m[0].length
    }

    /**
     * 封装的意义
     *    每次需要遍历的时候不需要都写for
     * @param cb
     */
    each(cb) {
        for (let j = 0; j < this.colsNum; j++) {
            for (let i = 0; i < this.rowsNum; i++) {
                const element = this.m[i][j]
                cb(element, i, j)
            }
        }
    }

    /**
     * j 为 列
     * i 为行
     * 从列开始拿起 一列一列拿
     * m[0][0]
     * m[1][0]
     * m[2][0]
     * desArr[j][i] = this.m[i][j]
     * @returns {*[]}
     */
    transpace() {
        const desArr = []
        for (let j = 0; j < this.colsNum; j++) {
            desArr[j] = []
            for (let i = 0; i < this.rowsNum; i++) {
                desArr[j][i] = this.m[i][j]
            }
        }
        return desArr
    }
}

export {
    Matrix
}